package com.andnnl.function;

import java.util.function.Function;

/**
 * Created by chenss on 2020/5/18.
 */
public class FunctionTest2 {

    public static void main(String[] args) {
        testFunction();
    }

    private static void testFunction() {
        Function<Integer, String> function = a -> "== " + a;
        PrintUtil.printTest(function.apply(101));
        Function<String, Boolean> function1 = c -> c.length() > 2;
        PrintUtil.printTest(function1.apply("1a"));

        PrintUtil.printTest(function.andThen(function1).apply(111));
//andThen类似consumer，是前一个function执行后结果作为参数传新生成的function执行，结构：true

        Function<Integer, Integer> function2 = c -> c * c;
//compose和andThen正好逻辑相反，传入的参数function先执行后范围结果作为参数传给新生成的function执行
        PrintUtil.printTest(function.compose(function2).apply(2));
//先执行function2，返回结果作为参数再执行function，结果：== 4
        PrintUtil.printTest(function.compose(function2).andThen(function1).apply(2));
//先执行function2 (4)，其次执行funciton (==4)，最后执行function1 (true)，结果：true
        PrintUtil.printTest(function2.compose(function2).apply(2));
//先执行第二个function2，返回结果作为参数再执行第一个function2，结果：16
//递归的实现又多了种办法

        Function<String, String> function3 = Function.identity();//static方法
        PrintUtil.printTest(function3.apply("hello"));
//identity定义了一个只返回输入参数的function,结果：hello
    }


}
